#ifndef TSINTACTICO_H_
#define TSINTACTICO_H_

#define MAX_DATO 256
#define MAX_ESTRUCTURAS_ANIDADAS 10

typedef enum {
	NonStruct, ObjStruct, ArrayStruct
} TipoEstructura;

/*Estructuras logicas segun el tipo
 **Objeto:	OBJ_EMPIEZA, OBJ_STRING, OBJ_DOSPUNTOS, OBJ_VALUE, OBJ_COMA, OBJ_TERMINA
 **Array:	ARRAY_EMPIEZA, ARRAY_VAL, ARRAY_COMA, ARRAY_TERMINA	*/

typedef struct _estructSintact {
	TipoEstructura estructura; /*los posibles valores de estructura_val refieren al estado en q se encuetra*/
	int estructura_val; /*el JSON segun la estructura actual: Objecto o Array*/
} EstructuraSintactica;

typedef struct _error {
	int codigo;
	char descripcion[MAX_DATO];
} TipoErrores;

typedef struct _tSinactico {
	EstructuraSintactica estructura_Sintactica[MAX_ESTRUCTURAS_ANIDADAS];
	int pos_vEstructuraSint; /*last position used in the synyact_Structure[] array*/
	TipoErrores ultimo_error;
} TSintactico;

typedef struct _token {
	int tipo;
	char dato[MAX_DATO];
	int pos_dato;
} Token;

int TSintactico_Crear(TSintactico* as);

int TSintactico_Destruir(TSintactico* as);

int TSintactico_PushToken(TSintactico* as, Token* token);

int TSintactico_terminarFlujo(TSintactico* as);

int TSintactico_getUltimoError(TSintactico* as, int* codigo, char* mensaje);
#endif /* TSINTACTICO_H_ */
